3 ms·
As go_prodev indicated, the former just isn't how you reason about data modeled in a relational form. The latter makes little sense. What constraints are you p
by BeefWellington 4y ago
As go_prodev indicated, the former just isn't how you reason about data modeled in a relational form.
The latter makes little sense. What constraints are you placing on a college that do not also apply to a highschool, given they're both schools?
> The other thing in the grandparent's comment that's a constant pain in SQL is representing an ordered list: how do you insert items into the middle of the list? Depending on your database, it can also be painful to renumber the other items.
I'm unclear on what you mean by this. If you want a list of records ordered in a certain fashion, there's an entire "ORDER BY" clause for that express purpose. If you're trying to add "extra" data into the middle of some list that is not otherwise represented in the data in the database, that's essentially business logic and you should be using some kind of custom view or procedure to do that or doing it inside your application code.
If it's just a question of how you add data into the middle of a resultset from actual data in a table based on some arbitrary ordering, you can do that too, people solved that problem ages ago by simply having an ORDER column or similar that's just an int with whatever likeliest precision you get, e.g.: default might be 1000 and then if need be you can insert 999 items between two others before needing to do a re-numbering on the column. These are dumb tricks but needing to "insert a record between two other records" is often also a dumb trick someone is trying to do in the database because they haven't designed things well elsewhere.
I'd venture the 99.9% case is querying real live data in the database and ordering it by factual things like record names, dates of update or creation, status, etc.
- vore 4y agoThat's exactly it though: having to do dumb tricks is the painful part. There's plenty of things with user-defined order where an explicit index isn't surfaced, like to-do lists, playlists, etc.
- BeefWellington 4y agoA user-defined order is an explicit index. EDIT: To expand further, I would generally model a playlist as its own tables anyways. Something like: CREATE TABLE playlist ( id ID_TYPE_FOR_DB PRIMARY KEY, name varchar(4096), /* Or whatever storage size makes sense */ ) CREATE TABLE playlist_entry ( id ID_TYPE_FOR_DB PRIMARY KEY, song_ref ID_TYPE_FOR_DB FOREIGN KEY REFERENCES songs(id), order INT, /* Or bigint or whatever you want */ )