相关疑难解决方法(0)

用 MySQL 实现版本控制系统

我知道这里这里有人问这个问题,但我有不同的可能实现的相同想法,我需要一些帮助。

最初,我的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)

mysql database-design

17
推荐指数
2
解决办法
1万
查看次数

为资金转移业务开发数据库,​​其中 (a) 个人和组织可以 (b) 发送和接收资金

在相关的业务背景,既成员组织需要有一个帐户资金资金可以转移

  • 会员会员
  • 会员组织
  • 组织组织,以及
  • 组织成员

注意事项

为了为这种场景构建数据库,我创建了以下三个表:

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)

postgresql database-design subtypes

8
推荐指数
1
解决办法
3045
查看次数

存储送货地址最佳实践

我正在构建一个结帐系统,它需要将客户的送货地址存储在数据库中,但我不确定最好的方法。

目前我有一个地址表,它存储每个地址的唯一 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,如果用户编辑该地址,则会更改送货地址,从而导致错误。

我只看到两种解决方案:

  1. 将送货地址作为新行存储在地址表中,尽管这会复制已经存在的数据。
  2. 当用户编辑他们的地址时,它会插入一个新地址并将旧地址保留在数据库中,而不是更新数据。

什么是最好的解决方案,为什么?

mysql

7
推荐指数
1
解决办法
8103
查看次数

将个人数据存储在发票上以保持数据完整性

我想存储发票数据,如人员地址。但问题是地址会随着时间的推移而改变——例如,有人会搬出去改变他的地址。存储此类数据的问题出现了,因为我们无法更改某些发票上引用的数据。

我有 3 个表:(AddressInfo包含 StreetAddress 等),Person它们与AddressInfo, 和Invoice表具有一对多关系。

我有两个解决方案,但我不确定哪个方向是正确的方法:

  • 创建AddressInfo并使其可软删除,添加一些类似的列IsActiveIsDeleted以便我的Invoice表可以通过其 ID 引用此地址信息,并且保证保持不变,除非有人在不使用我的应用程序的情况下直接更改此数据。

    因此,当有人更改他的地址时,我会软删除(也许应该称为软更新?)当前地址并添加新地址,而根本不会触及旧记录。最好先检查一下发票上是否引用了它以防止污染。

    我的Invoice桌子看起来有点像:

    | InvoiceId | AddressInfoId |

  • 将所需的列添加AddressInfo到我的Invoice表中。每次创建新发票时,我都必须复制数据,地址不会经常更改,重复记录会稍微污染我的数据库。

    我的Invoice表看起来有点像(大大简化):

    | InvoiceId | StreetAddress |

您是否有使用解决此特定问题的数据库(可能是某些 ERP 软件)的经验?


有趣的朗读:

https://martinfowler.com/eaaDev/timeNarrative.html

schema database-design denormalization

7
推荐指数
1
解决办法
2159
查看次数

为大量不同的实体存储创建/退休日期

在我现在正在处理的数据库中,几乎每个实体都有这 4 列:

CreatedDate
CreatedBy
RetiredDate
RetiredBy
Run Code Online (Sandbox Code Playgroud)

通常这用于记录目的,对于某些实体来说,知道它何时退役的有用性是有争议的(但不要告诉我的老板)。对于其他一些东西,(比如卡车)它更有意义,因为“退役”的车辆可能会重新投入使用。

无论如何,我想知道将这些信息放在一张桌子上是否是个好主意,因为它到处重复。如果是的话,任何人都有一个好名字..?简单created_retired_dates吗?

schema normalization database-design

4
推荐指数
1
解决办法
1801
查看次数