Mat*_*s S 5 mysql database eloquent laravel-4
我有一个非常简单的问题,涉及两种选择,我不知道该选择哪一种。我有可以是“联系人”的实体。一个“联系人”可以有多个电子邮件地址、多个电话号码和多个地址。在我的数据模型中,我创建了实体联系人,它与实体的电子邮件、电话和地址具有一对多的关系。现在,表电子邮件只有字段“电子邮件”和“评论”,电话具有类似的结构“电话号码”和“评论”。

将它们保留在两个不同的表中是否“更好”,或者我应该制作一个表,将其命名为“详细信息”或其他名称,列为“值”、“类型”和“评论”,类型为“电子邮件”或“电话号码'。

我正在使用 L4 并通过 Eloquent 模型,我希望可以轻松地编写一些方法,为我提供与不同表相同的功能。但我觉得用字符串来分隔不同类型的信息是错误的。感觉这样比较容易犯错误。通过急切加载,即使我有 2 个表,我也希望不会有更多的查询。仅供参考,电话/电子邮件中的行数肯定会低于 10.000。
我选择什么类型有什么影响吗?你会怎么办?为什么?
感谢您的帮助,
亲切的问候
这取决于您计划如何处理这些字段。在没有进一步信息的情况下,我倾向于将它们放在一张表中。
有些纯粹主义者会说,拥有电子邮件地址与电话号码不同,因此使用同一字段来保存两者是违反自然的行为。
当你在两个领域所做的事情不同时,我同意这种想法。就像如果有人说有时这个字段包含电话号码,有时它包含交易金额,当我们计算总余额时,我们将所有交易金额相加,但忽略电话号码,我会哭。
但这种推理可能会走向荒谬的极端。问题实际上不在于现实世界中的两件事是否不同,而在于它们对于我们系统的目的是否不同。就像我无法想象的那样,因为有时地址是邮政信箱,有时是街道地址,有时是公寓号码等,所以我们必须为每一个内容都有单独的字段,而不仅仅是“地址行 1” ”和“地址行 2”。或者我们必须为“棕色头发的人的名字与”金发人的名字”有单独的字段,因为嘿,他们看起来不同。我与用户进行了很多令人沮丧的对话,我试图向用户解释这一点就而言,一切都是“产品”,用户说不不不,怎么可能说家具和文具一样呢?但如果我们在系统中记录的是名称、现有数量、价格,而不是我不关心差异等等。
事实上,我在软件开发中最自豪的时刻是当我意识到现实世界中不同的两件事对于系统来说实际上是相同的,并且可以用一张表或一段代码而不是许多代码来处理时。就像在这个过程中的某个地方,我发现员工、供应商和客户都有姓名、地址、电话号码和电子邮件。因此,现在我不再将所有这些字段放在员工表中,将所有相同的字段放在供应商表中,并将所有相同的字段放在客户表中,而是创建一个称为“人员”的字段,并将所有常见内容放入其中,然后从其他表链接到它。因此,当有人说现在我们必须处理外国地址时,我会更改一张表而不是三个,如果我聪明的话,我会更改一个地址格式化函数而不是 3 个。
在这种情况下,您将如何处理电话号码和电子邮件地址?可能主要是让用户输入它们,然后再显示它们。我可以很容易地想象出一个你甚至永远不会检查哪个是哪个的系统。在数据输入时,有一个“联系信息类型”的下拉菜单,在显示时,您会显示联系人类型以及联系人值,可能按联系人类型排序。如果您要发送自动电子邮件,也许您选择 type='email'。
现在,如果您使用电子邮件地址作为联接字段从该表到另一个表进行联接,那么情况会有所不同,因为这样您的一半数据就没有意义了。
顺便说一句,如果您确实使用一张表,则需要一个代码来说明这是什么类型的联系人。我想你意识到了这一点。我建议您考虑创建一个包含代码及其定义的查找表,例如创建表 contact_type (contact_type_code char(2) 主键、contact_type_description varchar(40)),而不是在程序中对联系人类型进行硬编码。或者更糟糕的是,将联系人类型的描述放在每个记录中,因此有时会说“电子邮件”,有时会说“电子邮件”,有时会说“电子邮件”,有时可能会说“电子男性”或“互联网” 。
很抱歉回答这么长。