gpt4 book ai didi

php - 如何在不损失性能/良好设计的情况下构建完全可定制的应用程序(又名数据库)?

转载 作者:行者123 更新时间:2023-11-29 12:34:31 26 4
gpt4 key购买 nike

我正处于对我的 Web 应用程序进行完全重新设计的开始阶段,我对一个可靠的、查询性能良好的数据库设计以及同时完全由用户自定义(用户不会自定义数据库结构,但应用程序的功能)。

所以,我的实际情况是,比如一个简单的用户表:

id | name | surname | nickname | email       | phone
1 | foo | bar | foobar | foo@bar.com | 99999

就是这样。

但是,假设我的一位客户想要为一位特定用户提供 2 个电子邮件地址或电话号码。

直到现在,我过去常常通过在用户表中添加列来解决这个问题:

id | name | surname | nickname | email       | phone | email_two    | phone_two
1 | foo | bar | foobar | foo@bar.com | 99999 | foo@bar.net | 999998

但我不能在新应用程序的版本中使用这种方式。之后我想喝莫吉托,不喜欢客户要求编辑结构:)

所以,我想到了一个解决方案,人们可​​以简单地使用另一个表来定义海关字段:

id | table_refer | type_field | id_object | value
1 | users | phone | 1 | 999998
2 | users | email | 1 | foo@bar.net

保持用户表不变。

但是这种方式有两个问题:

  1. 据我所知,不可能以这种方式使用外键,如果我自动删除 1 个用户,外键会级联删除第二个表中具有“table_refer”值=用户和id_object=users.id。当然,我可以使用一些触发器功能,但我会失去一些可靠性。
  2. 当我需要查询数据库时,在检索与“foo@bar.net”匹配的用户之前,我将不得不检查所有... hem.. option_table,这将使我代码复杂且不太可靠且有许多连接困惑.. 假设用户表不会是唯一被“option_table”“扩展”的表,这似乎是一个灰色 View 。

我的目标是让我的客户根据需要为应用程序中的几乎所有对象(用户、项目、发票、打印 View 、照片、新闻等)添加尽可能多的自定义字段,假设大多数这些表的一部分将被分区(分成 2 个表,一个 3 个表和继承 gerarchy)。

您认为我的方法可以很好,您是否知道其他更好的方法,还是我犯了大错?拜托,现在每个建议都是金子!

编辑:

我正在寻找的内容可以通过 wordpress 博客中的“文章自定义字段”得到简化。我的目标是让用户定义他需要的新字段,例如,如果我的用户表是上面的那个,而客户需要一个我没有阻止的字段,比如网站 url,他必须能够动态添加,不编辑数据库结构,只编辑数据。

我认为 2° table(每个对象 maibe 1)可以是一个很好的解决方案,但我仍在等待更好的方法!

最佳答案

正如我在 Answer 中所说类似的问题“数据库设计很难”。您将不得不决定哪个更适合您,规范化表格并将电话号码和电子邮件地址放入他们自己的表格中,并使用关联的 JOIN 来检索数据,以及引用的额外工作完整性,或者在您的表中有一些 n 个电子邮件和电话字段,以及随之而来的“数据困惑”。

数据库设计总是一系列的权衡。您需要从各个角度进行审视,也许要制作一些原型(prototype)并进行一些分析等。没有“一个正确的答案™”。

关于php - 如何在不损失性能/良好设计的情况下构建完全可定制的应用程序(又名数据库)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/951387/

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