我知道这里和这里有人问过这个问题,但我有不同的可能实现的相同想法,我需要一些帮助。
最初,我的blogstories
表具有以下结构:
| Column | Type | Description |
|-----------|-------------|------------------------------------------------|
| uid | varchar(15) | 15 characters unique generated id |
| title | varchar(60) | story title |
| content | longtext | story content |
| author | varchar(10) | id of the user that originally wrote the story |
| timestamp | int | integer generated with microtime() |
Run Code Online (Sandbox Code Playgroud)
在我决定要为博客上的每个故事实施一些版本控制系统后,我想到的第一件事就是创建一个不同的表来保存编辑;在那之后,我想我可以修改现有的表来保存版本而不是edits。这是我想到的结构:
| Column …
Run Code Online (Sandbox Code Playgroud) 在相关的业务背景,既成员和组织需要有一个帐户的资金。资金可以转移
注意事项
为了为这种场景构建数据库,我创建了以下三个表:
CREATE TABLE Members (
memberid serial primary key,
name varchar(50) unique,
passwd varchar(32),
account integer
);
CREATE TABLE Organizations (
organizationid serial primary key,
name varchar(150) unique,
administrator integer references Members(memberid),
account integer
);
CREATE TABLE TransferHistory
"from" integer, -- foreign key?
"to" integer, -- foreign …
Run Code Online (Sandbox Code Playgroud) 我正在构建一个结帐系统,它需要将客户的送货地址存储在数据库中,但我不确定最好的方法。
目前我有一个地址表,它存储每个地址的唯一 ID:
id | address | city | division | country | postcode
-----------------------------------------------------------------
1 | 23 Example Road | York | Yorkshire | GB | PE21 5QR
2 | 7 Lala Land | Stockton | California | US | 96341
Run Code Online (Sandbox Code Playgroud)
然后我有一个称为 account_addresses 的多对多关系表,它将地址链接到用户帐户:
account_id | address_id
-----------------------
23 | 1
48 | 2
Run Code Online (Sandbox Code Playgroud)
为了将送货地址存储在数据库中,我将允许用户选择他们现有的地址之一,或者让他们向他们的帐户添加一个新地址并将该地址 ID 存储在订单表中。但是,我意识到如果我只存储地址 ID,如果用户编辑该地址,则会更改送货地址,从而导致错误。
我只看到两种解决方案:
什么是最好的解决方案,为什么?
我想存储发票数据,如人员地址。但问题是地址会随着时间的推移而改变——例如,有人会搬出去改变他的地址。存储此类数据的问题出现了,因为我们无法更改某些发票上引用的数据。
我有 3 个表:(AddressInfo
包含 StreetAddress 等),Person
它们与AddressInfo
, 和Invoice
表具有一对多关系。
我有两个解决方案,但我不确定哪个方向是正确的方法:
创建AddressInfo
并使其可软删除,添加一些类似的列IsActive
,IsDeleted
以便我的Invoice
表可以通过其 ID 引用此地址信息,并且保证保持不变,除非有人在不使用我的应用程序的情况下直接更改此数据。
因此,当有人更改他的地址时,我会软删除(也许应该称为软更新?)当前地址并添加新地址,而根本不会触及旧记录。最好先检查一下发票上是否引用了它以防止污染。
我的Invoice
桌子看起来有点像:
| InvoiceId | AddressInfoId |
将所需的列添加AddressInfo
到我的Invoice
表中。每次创建新发票时,我都必须复制数据,地址不会经常更改,重复记录会稍微污染我的数据库。
我的Invoice
表看起来有点像(大大简化):
| InvoiceId | StreetAddress |
您是否有使用解决此特定问题的数据库(可能是某些 ERP 软件)的经验?
有趣的朗读:
在我现在正在处理的数据库中,几乎每个实体都有这 4 列:
CreatedDate
CreatedBy
RetiredDate
RetiredBy
Run Code Online (Sandbox Code Playgroud)
通常这用于记录目的,对于某些实体来说,知道它何时退役的有用性是有争议的(但不要告诉我的老板)。对于其他一些东西,(比如卡车)它更有意义,因为“退役”的车辆可能会重新投入使用。
无论如何,我想知道将这些信息放在一张桌子上是否是个好主意,因为它到处重复。如果是的话,任何人都有一个好名字..?简单created_retired_dates
吗?