gpt4 book ai didi

database - 在数据库中存储首选项/一对一关系

转载 作者:搜寻专家 更新时间:2023-10-30 23:23:43 24 4
gpt4 key购买 nike

在我的数据库中存储某些对象的设置的最佳方式是什么?

  1. 方法一:使用
    表:公司 {CompanyID、CompanyName、AutoEmail、AutoEmailAddress、AutoPrint、AutoPrintPrinter}

  2. 方法二:使用两个
    表公司 {CompanyID, COmpanyName}
    表 2 CompanySettings{CompanyID, utoEmail, AutoEmailAddress, AutoPrint, AutoPrintPrinter}

最佳答案

我会更进一步......

表 1 - 公司

CompanyID (int)
CompanyName (string)

例子

CompanyID 1
CompanyName "Swift Point"

表 2 - 接触类型

ContactTypeID (int)
ContactType (string)

例子

ContactTypeID 1
ContactType "AutoEmail"

表 3 公司联系方式

CompanyID (int)
ContactTypeID (int)
Addressing (string)

例子

CompanyID 1
ContactTypeID 1
Addressing "name@address.blah"

此解决方案为您提供了可扩展性,因为您将来无需添加列来应对新的联系人类型。

SELECT
[company].CompanyID,
[company].CompanyName,
[contacttype].ContactTypeID,
[contacttype].ContactType,
[companycontact].Addressing
FROM
[company]
INNER JOIN
[companycontact] ON [companycontact].CompanyID = [company].CompanyID
INNER JOIN
[contacttype] ON [contacttype].ContactTypeID = [companycontact].ContactTypeID

这将为每个公司提供多行。一行用于“AutoEmail”,一行用于“AutoPrint”,将来可能一行用于“ManualEmail”、“AutoFax”甚至“AutoTeleport”。

对 HLEM 的回应。

是的,这确实是 EAV 模型。当您希望拥有具有相似数据的可扩展属性列表时,它很有用。在这种情况下,使用表示联系人“地址”的字符串的不同联系方式。

如果您不想使用 EAV 模型,接下来应该考虑关系表,而不是将数据存储在平面表中。这是因为此数据几乎肯定会扩展。

EAV 模型和关系模型都不会显着降低查询速度。与(例如)排序相比,连接实际上非常快。返回一个公司的记录及其所有关联的联系人类型,或者实际上是一个特定的联系人类型会非常快。我正在处理一个包含数百万行和类似数据模型的金融 MS SQL 数据库,并且在亚秒级的时间内返回大量数据没有问题。

就复杂性而言,这并不是数据库建模方面最具技术性的设计,连接表的概念绝对低于我认为的“中级”数据库开发水平。

关于database - 在数据库中存储首选项/一对一关系,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2600849/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com