我想要一个“记录”表(假设这个表中填充了我之前创建的一些值)。
我还希望用户能够创建自己的记录(只有他能够观看他的记录,但他也将能够观看所有的“一般”记录,我已经创建了手)。
既然如此,什么是更合适的表格设计,为什么呢?
1.
CREATE TABLE records (
record_id int PRIMARY KEY NOT NULL AUTO_INCREMENT,
user_id int,
name VARCHAR,
FOREIGN KEY (`user_id`) REFERENCES `users` (`user_id`));这样,我自己插入的所有记录在user_id外键中都将为null。所有由实际用户创建的记录都有他们的user_id 2。
CREATE TABLE records (
record_id int PRIMARY KEY NOT NULL AUTO_INCREMENT,
name VARCHAR);
CREATE TABLE user_records(
user_id int NOT NULL,
record_id int NOT NULL,
PRIMARY KEY(user_id, record_id));这样,所有的一般记录都将在records表中,并且所有的user_records将被分开。
什么是更有用/更合理的设计?例如,我相信第二种设计会更容易扩展(我可以增加更多的列,而不用担心它们的用途是否适合食物表)。
谢谢!
发布于 2021-03-25 18:49:10
我会分配一个代表“管理”条目的user_id,并使用第一种方法。这样,您以后可以添加更多的记录,而不必太担心它,因为系统将处理它,就像任何其他用户插入一样。它还有一个额外的好处,那就是根本不允许空档。通常,我尽量避免使用NULL作为除“无信息存在”之外的任何有意义的值。
至于允许用户查看您输入的内容,用于检索其记录的代码将只包含一个OR子句。例:
从记录_信息中选择user_records
其中user_id=@user_id或user_id=9999
https://dba.stackexchange.com/questions/287700
复制相似问题