考虑我有一张带有注释的表,可以与零个或多个标签相关联,我将如何决定
create table notes (
id int , -- primary key
-- other fields
);
create table tagmapping (
noteid int, -- refers notes.id
tagid int, -- refers tags.id
);
create table tags (
int id, -- primary key
tagname varchar(255)
);
vs可能会多次存储相同的标签
create table notes (
int id, -- primary key
-- other fields
);
create table bar (
id id, -- primary key
tag varchar(255),
-- other fields
noteid int -- refers to notes.id, (not unique)
);
我会采用哪种混乱/优势进行最后一种方法?
答案 0 :(得分:1)
第一种方式是实现多对多关系的标准方式。你应该这样做,因为这会给人们带来最大的惊喜。
第二种方法有几个问题:
答案 1 :(得分:0)
对于第二种方法:
如果您需要重命名代码,该怎么办?您必须手动或通过一系列查询在每个笔记中重命名
存储重复数据通常被认为是DBA和开发人员的不良做法。最好随时<{3}}
答案 2 :(得分:0)
当您需要更改标记或向标记添加属性时,第二种解决方案的缺点部分会自行解决。假设您有一个名为“Foo”的标记,您现在希望添加一个属性,以便您确定标记是否处于活动状态。在第二种方法中没有办法做到这一点。您必须在表示层中强制执行“魔术标记名称”。此外,您无法在标记上强制执行一致的命名。有人可以添加一个名为“Foo”的标签和另一个名为“Fu”的标签,即使它们应该是相同的标签。