|
|
1
4
根据我的经验,当开发人员试图使他们的系统真正“动态”时,他们实际上是在为他们还没有想到的问题编写代码。这通常是一条不好的路。一个模块包含两个表而不是一个表真的有那么多额外的工作吗? 在任何情况下,我都看到了模式(或反模式?)为了制作一张普通的“万事俱备”的桌子,它的脸被压扁了。RDBMS最适合于定义明确的问题领域。如果模块需要保留历史记录,那么模块应该添加一个历史记录表,以便与表本身一起使用。这也有一个巨大的优势,即沿着这条路走下去,您可能希望在历史记录中保留不同类型的信息,具体取决于保存历史记录的表或模块。如果您有一个通用的历史记录表,那么这就变得更加困难了。 现在,如果您只想捕获最后一个要更新或插入特定项(表行)的用户,并且该用户可能位于多个表中,那么您可以使用继承模式,其中有一个父表和多个子表。例如:
|
|
|
2
2
在我看来,你是在找一个向导带领你走一条弯弯曲曲、荆棘丛生的小路。 我不知道为什么每次得到一个新的“模块”(我不清楚模块是什么)时都需要添加一个新表,前提是这些模块都可以用相同的列布局描述。您可以添加模块表,然后在项目表中包含moduleid列。 另外,文章可以有多个作者,所以如果有,您需要一个ArticleAuthors表。在某些圈子里,作者对一篇文章的顺序很重要。这是他们贡献的重要性或他们在这个领域的重要性的排名。如果是这样,您需要有一个“序数”列来反映作者的位置。 |
|
|
3
2
我认为您最好使用一个changeHistory表,该表如下所示: ItemChangeHistory +- id +- changedItem_id +- user_id +- changedItemType_id +- type [enum(insert, update, delete)] +- datetime
然后使用
现在您提到一个模块可能有其他表,所以可能需要使用子模块ID跟踪这些表,也可以在
|
|
|
4
0
为什么不呢?
|
|
5
0
@ Majid: 我理解这可能是最合理的解决方案,但我希望找到一些更直观的解决方案,一些可能利用现有数据库参数的方案,例如难以捉摸(而且显然不存在)的表ID(我指的是引擎innodb在我的例子中用来描述TA的某种内部引用)。BLE) @沮丧: 我想我会带这样的东西去。我将继续调查可能性。 |