我有一张桌子有很多问题。我在某些字段中保存用逗号分隔的数据,之后我无法搜索它们。然后,在搜索网络并找到很多解决方案之后,我决定将一些表格分开。
我有一张桌子,成了5张桌子。
第一个表名为agendamentos_diarios,这是我将要存储日程表的表。
第二个表是表tecnicos,我正在存储技术人员的名字。两个字段,id(主键)和名称(varchar)。
第三个表名为agendamento_tecnico。这是表(链接)我是goona存储第一个和第二个表的id。那是因为有些时间表会由一名或多名技术人员参加。
Forth表被称为veiculos(车辆)。车辆的ID和名称(两个字段)。
Fith表是第一个和车辆表之间的链接。一样。我要存储时间表ID和车辆ID。
我有一张图片可以解释得比我想说的更好。
我做得对吗?有没有更好的方法将数据存储到MySQL?
答案 0 :(得分:3)
我同意@Strawberry有关id的信息,但通常是Hibernate映射类型执行此操作。如果您没有使用Hibernate来设计表格,那么您应该从agendamento_tecnico和agendamento_veiculos中取出ID。那样你就保证了这种独特性。如果您不想这样做,请在桌面上的FK字段上创建一个唯一键。
我注意到您将车辆工作台与技术人员分开。在您的模型上,同一车辆可以同时处于两个不同的时间表(这没有意义)。如果将车辆链接到agendamento_tecnico表格会更好,那将会变成agendamento_tecnico_veiculo。
看着你的桌子,我注意到(我是巴西人)你有一个名为“servico”的栏目,意思是服务。您的计划表仅适用于一项服务。在同一时间表上你有多个服务怎么样?要解决此问题,您可以创建表服务并使用计划创建m-n关系。创建一些报告并在数据库中很好地分离服务会更容易。
还有一个nome_cliente字段,表示该计划的客户端。如果你有一个客户(客户)表并将计划与FK链接会更好。
如前所述,没有正确的答案。你必须考虑你的问题以及可能的问题。正确建模数据库可以避免以后的麻烦。
答案 1 :(得分:2)
更好是主观的,没有正确的答案。
我天生的本能就是打破这个日程表。 看起来有关技术人员和客户的数据是重复的。
你可能会再次出于完全正确的原因做出去标准化的决定。
怀疑你会发现这里的任何人不同意你的意思,但是你没有逗号分隔的字段。
您呼吁停止更改取决于您的具体情况。逗号分隔的字段引起了你的问题,你摆脱了它们。那么你现在在哪里引发了一个问题呢?
答案 2 :(得分:1)
看起来不错,特别是如果第一次尝试
一条评论:我会在所有表中将PK / FK(ids)命名为相同而不使用'id'作为名称(另外我们使用'#'或'_'作为结束字符primary / foreighn键:示例technicos.technico_
和agendamento_tecnico
包含字段agend_tech_
和technico_
。但这不是常识。它会使查询更加复杂(因为您必须完全限定字段),但使数据库模式可读(你知道PK属于FK的那一刻)
其他评论:两个assotiative(我以前从未写过那个词!)表,加入technos
和agendamento_tecnico
有一个自己的ID字段,但是他们不需要那个,因为这两个(主要的) / unique)他们加入的两个表的键是唯一的selfes,因此您可以将它们用作此表的PK,如:
CREATE TABLE agendamento_tecnico (
technico_ int not null,
agend_tech_ int not null,
primary key(technico_,agend_tech_)
)