The Power of Data and Privacy

I tend to be fairly careful with data, especially data on this site. When we started the site, we were worried about potential issues and worked hard to ensure we kept our systems safe and limited the attack surface area for personal information. We also declined the various offers we had to sell our list of subscribers to marketing firms. We know that some places add value for marketing, but some abuse the trust of their users and our approach was always to be careful.

When we sold the site to Redgate, we emphasized the need for this trust, and to date, Redgate has been a great steward of your personal information. I regularly field requests for uses of data from other marketing people, and almost all get declined. I’ve had a number of great managers who have supported me on this because we value your privacy.

Recently I saw a piece from Troy Hunt, asking who deserves privacy. He runs HaveIBeenPwned, which tracks data breaches. There have been some sensitive breaches, like the Ashley Madison breach, and he has decided to handle some of those differently. I appreciate that, even though I don’t visit any of those sites, I do think there can be unintentional consequences from revealing too much data.

We certainly have plenty of problems with public data, which was never intended to be accessed at scale. Once someone can query lots of data from one place, they can correlate and use it in ways we never imagined.

In the piece Troy notes that he has been attacked by some people because he has chosen to redact certain information. This is censorship of a sort, but a) this is a private site, and b) there are good intentions. This service was never intended to be a weapon, and I agree with that. I have rarely censored anyone at SQL Server Central, but it has happened when someone becomes harassing and unprofessional. Our forums are great for civil debate and disagreement, but not for personal attacks.

I am glad for the restrictions that the GDPR and similar legislation has placed on how companies used data. It has made many individuals and organizations more responsible with how they handle data internally. It hasn’t necessarily helped with data breaches, but at least there are less intentional abuses.

Data has tremendous power at scale and my view is similar to Troy’s: we all deserve some level of privacy.

Steve Jones

Listen to the podcast at Libsyn, Spotify, or iTunes.

Note, podcasts are only available for a limited time online.

Posted in Editorial | Tagged | Leave a comment

Setting FK Constraints in Data Modeler

One of the things a customer asked recently about Redgate Data Modeler was how to set a FK constraint between two tables. The tool seemed to make it easy, but they encountered a few errors. Here is how this worked for me.

This is part of a series on Redgate Data Modeler.

Adding a Constraint

This might make more sense in the video walkthrough, but here’s the text version. I want to add a constraint to my model that links the Organization and User tables shown below. This is a 1 (Organization) to many (User) FK.

2026-02_0104

I don’t have a good FK yet in the child table (User), but that’s OK. I’ll click the Add new reference icon in the upper left of the design surface.

2026-02_0105

Once I do this, I can click on the Organization table and drag to the User table. That will give me this view. Note that this defaults as a 1:n relationship, so you want to start with the parent. There also is a new “Organization_OrganizationID” column added as a FK.

2026-02_0106

That’s not a bad pattern, especially with modern Intellisense, where I don’t need to type everything out. This lets me know where the join should be. However, for many of us, we prefer having something simpler, like OrganizationID as the column in the child.

If I want to change this, I can look to the right for the Reference Properties. Note the default name below is User_Organization, which I definitely don’t like.

2026-02_0107

I can adjust the name to meet my standard, which I’ll do. I can also adjust the FK column, but I’ll need to go to the child table, User, to do this. If I rename that column there, I see this.

2026-02_0108

When I click back on the reference, I see this. My change for the FK table is there, but the Primary has defaulted to OrganizationName. Fortunately, there’s a drop down where I can change this.

2026-02_0109

Below this, I have other properties. There’s a color (if you care), but also I can set cascading actions. See the drop down below and the options. These can be set for update or delete. There is also the additional property to set this as not for replication.

2026-02_0112

Once I do this, the changes are saved. If I generate the SQL script, I can see my FK exists inside the script. You can see the relevant portion below.

2026-02_0113

Summary

Setting accurate FK constraints is an important part of data modeling. I certainly see the reasons why some people don’t like FKs, but if you set them, you want them to be accurate. Redgate Data Modeler supports this, but it’s not as straightforward as I like. Hopefully that changes over time.

I don’t know that the names matter that much, but in case you are concerned about naming, you can customize this.

Give Redgate Data Modeler a try and see if it helps you and your team get a handle on your database.

Posted in Blog | Tagged , , | Leave a comment

Webinar: Navigating the Database Landscape in 2026

For a number of years, we’ve produced the State of the Database Landscape report, based on surveys and research we do every year. I have found it very interesting to see how people respond and what we learn from the report each year.

This year is no different, with one change; we’re doing a webinar. Register to hear the advocates talk about navigating the database landscape in 2026. Grant, Kellyn, Pat, and myself are set to sit down and discuss the findings on Feb 18 at 1200pm EST.

We reviewed the report and now each of us is digging in to those areas we are most interested, and we’ll express our thoughts in the webinar. With over 100 years of database experience between us, we hope you’ll enjoy it.

And we are ready to take your questions and discuss and debate the future of our industry.

Register today and I’ll see you on Feb 18.

Posted in Blog | Tagged , , , | Leave a comment

Aging Code for T-SQL Tuesday #195

It’s that time of the month again, with T-SQL Tuesday coming along. I managed to not forget about this and checked with the host. He had an issue, but fortunately I got a friend to step up.

This month Pat Wright has an interesting question, asking how your code has aged. He and I have had a few conversations lately about getting older and when I asked him to host, this was a perfect choice.

I’m definitely getting older, but what about my code?

25 Years Later

Actually a little more, but I wrote a series called “Tame Those Strings” for Swynk a long time ago. That became Database Journal, but during the switch, they stopped paying us authors. A few of us started SQL Server Central and we went live 25 years ago.

In that piece, I referenced the oldest article, which is Tame Those Strings Part 4 – Numeric Conversions. There’s also a part 3, but in those pieces, is that code still useful?

A bit.

These are basic articles looking at string functions that are still heavily in use today. The idea of cleaning phone numbers using REPLACE is still something we might do today. If we are using SQL Server 2025, there are additional functions, but I still see a lot of code that still use multiple CHARINDEX+SUBSTRING or REPLACE functions.

I asked the Prompt AI if it could do better.

2026-02_0091

It gave me two pieces of code. The first is nested REPLACE() statements. This works, but I find this hard to read. I’d rather have separate statements, for ease of maintenance.

2026-02_0095

The second is a single statement, using a CASE and STUFF and XML to clean things. I like this, thought it’s a semi-complex way of doing things. However, it works.

2026-02_0096

Has the code aged well? I think it’s OK. There are better ways, as shown with the STUFF/XML version, which wouldn’t have worked in SQL Server 2000. Still, the use of REPLACE is a common technique still used today.

For part 4, with the use of LTRIM and STR(), today we have FORMAT, which is cleaner. However, it’s likely less performant. In a simple test of 500,000 values, the FORMAT takes over 600ms to return the results while my LTRIM/STR combination consistently runs in the 460ms or quicker range.

I think my code aged well.

Posted in Blog | Tagged , | Leave a comment