我对数据库设计很陌生,我正试图尽早进入最佳实践。到目前为止,我所看到的所有地方似乎都有这样一种协议:“在开发开始时创建表名,并插入数据,不要为表名使用变量。好吧,我在寻找一个资产管理系统,但我无法克服似乎是一个设计缺陷。如果您熟悉的话,这个软件将非常类似于"quickbase”。
这是一个场景。
现在,这些类别中的每一个都将保存大量的信息,并且需要它自己的表。显然,我可以使用关系将这些表连接回帐户,但它们是一个问题(我认为)。用户可以根据需要创建任意数量的帐户,而且每次他们创建帐户时都需要与其一起创建的许多其他表。如"account_name_financials_table“等。
因此,我的问题是:在动态创建表名时,不使用变量可以做到这一点吗?或者,在创建表名时,使用变量作为表名是可以接受的。
如果这是局部的或模糊的,请让我知道,我会提供任何进一步的细节需要。
谢谢您抽时间见我
编辑
作为对大卫的回答的回应。
现在我完全理解了,每个帐户实际上只是一个条目,或者是一个表中的一行,它保存了每个帐户的信息。然后,列名将描述描述我的帐户并随后与其他表相关的数据。
现在这个问题的核心是,当我创建帐户时,还有其他表需要创建,或者至少我认为它们需要创建。例如,这将是一个财务表,其中包含有关该账户财务状况的具体信息。这些表上有一对一的关系。这意味着账户A只能有一套特定账户的财务数据。因此,当我创建帐户B时,我目前拥有的金融类表将不再有相关的列名、行或帐户B的数据。因此,当我为账户B创建这些新表时,它们可能更需要动态地执行。这么说,我如何在没有变量名称的情况下创建它们?
或者我还没说到重点。我突然想到,也许我可以有一个大的财务表,它保存着所有帐户的信息,并且信息是通过'id‘或其他唯一的fk标识符来定义/关联到特定帐户的?
发布于 2013-07-25 16:38:28
不要将表视为域中的实体,而是将其视为描述实体的定义,而该表中的每条记录都是该实体的实例。
鉴于此,这一说法变得不正确:
用户可以创建帐户,每个帐户都是自己的表。
Account
(或Accounts
,取决于您的命名约定)表是描述帐户实体的原理图定义。它可能有类似于帐户名称、注册日期之类的列。Account
表中的每个记录都是一个帐户。因此,将有一个Account
表,它保存域中的所有帐户。
在每个帐户中都有4-8个可跟踪的目录。
这种说法在描述关系数据时似乎有点违背直觉。不如:
每个帐户还可以有与其相关的其他数据,例如.
下面的几行描述的不是“帐户内部”的内容,而是与帐户相关的域中的另一个实体:
每个帐户本身都是一个实体(或者无论如何,目前的术语有点模糊),它们不一定描述一个帐户,但它们本身由一个帐户来描述。也就是说,一个帐户不会指向一个任务。任务指向一个帐户。帐户本身是描述任务的数据点。
因此,其中每一个都成为表本身,其中的记录有返回Account
表的外键。像这样简单的事情:
Task
----------------------
ID | int
AccountID | int
Description | nvarchar
ScheduledOn | datetime
诸若此类。该表中的每个记录(每个记录代表域中的一个任务)将包括一个AccountID
值,该值指示哪个帐户拥有该任务。
这些表应该是特定于任何特定实体子集的,但对于该特定实体的所有实例都应该是通用的。
您可以通过子类型表将实体进一步定制为不同的类型。例如,您可能有不同类型的帐户,并且有不同的字段来描述它们。您可能有一个Account
表,如上面所示,但是会有额外的表,其中主键也是Account
表的外键。这些表表示到Account
表的一对一关系,并且可以向帐户的“子集”添加更多的值。例如,一张这样的桌子:
PreferredAccount
---------------------
AccountID | int (PK, also FK to Account.ID)
PreferredStatus
BecamePreferredOn
诸若此类。这样,您就可以在逻辑上按类型分隔帐户,而不必创建多个表来表示帐户本身。
回到问题上..。最终,当用户创建帐户时,不会更改数据库的架构。他们只是在表中添加一条记录。
https://stackoverflow.com/questions/17870877
复制