使用多个表在MySQL中存储数据的更有效方法

时间:2013-12-10 16:58:24

标签: mysql sql database

我有一张桌子有很多问题。我在某些字段中保存用逗号分隔的数据,之后我无法搜索它们。然后,在搜索网络并找到很多解决方案之后,我决定将一些表格分开。

我有一张桌子,成了5张桌子。

第一个表名为agendamentos_diarios,这是我将要存储日程表的表。

第二个表是表tecnicos,我正在存储技术人员的名字。两个字段,id(主键)和名称(varchar)。

第三个表名为agendamento_tecnico。这是表(链接)我是goona存储第一个和第二个表的id。那是因为有些时间表会由一名或多名技术人员参加。

Forth表被称为veiculos(车辆)。车辆的ID和名称(两个字段)。

Fith表是第一个和车辆表之间的链接。一样。我要存储时间表ID和车辆ID。

我有一张图片可以解释得比我想说的更好。

Diagram

我做得对吗?有没有更好的方法将数据存储到MySQL?

3 个答案:

答案 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(我以前从未写过那个词!)表,加入technosagendamento_tecnico有一个自己的ID字段,但是他们不需要那个,因为这两个(主要的) / unique)他们加入的两个表的键是唯一的selfes,因此您可以将它们用作此表的PK,如:

CREATE TABLE agendamento_tecnico (
    technico_ int not null,
    agend_tech_ int not null,
    primary key(technico_,agend_tech_)
)