MySQL数据库设计

Chr*_*isO 7 mysql

我可以帮助我为我正在处理的网站设计数据库。我应该提一下,我是一个初学者,我过去从未设计过数据库。

好的,我的实现需要保存基于 5 个世界地区(欧盟、美国、韩国、中国、台湾)的拍卖数据。每次拍卖都用一个 ID 来标识,该 ID不是某个地区唯一的,而是该地区“领域”唯一的。最后的要求是:

  • 能够跟踪过去 4-6 个月内待拍卖的单个物品的历史市场价格。
  • 能够查看当前拍卖的物品。
  • 能够跟踪物品的卖家及其历史。
  • 能够在网站上创建个人资料。
  • 不需要能够比较区域。

一些统计数据:

  • 每个区域可以由 240 多个领域组成。
  • 每个领域在任何时候都有大约 20,000 个拍卖待售。

我目前的计划是为每个区域使用一个数据库,总共 5 个。这些数据库中的每一个都将具有以下表格:

  • Realms - 保存有关区域中所有领域的信息
  • 扫描 - 保存某个地区当前待售商品的快照。按领域索引。
  • 历史 - 为每个区域保存 4-6 个月的历史记录。这将包括看到的每一场拍卖。
  • 卖家 - 保存过去 4-6 个月内看到的所有卖家的数据。

我正在讨论是否最好只有两个表并将 Scan、Historical 和 Sellers 表合并在一起,然后如果用户只想查看卖家的当前扫描数据或信息,它将从组合表中计算出来苍蝇。

由于我是新手,我可以找一个更有经验的人来看看,如果我忽略了任何东西,请告诉我。请记住,我对性能以及我的设计是否可以接受一无所知。

任何感兴趣的人都可以在此处查看我正在使用的 API 的文档http://blizzard.github.com/api-wow-docs/我将有计划任务来导入数据并将其插入到数据库中。

如果我不够清楚,请随时问我。

Aar*_*ron 3

我会尝试一下这个。请注意,我刚刚列出了必需的字段。如果您想在这些表中存储其他数据,请随意添加它们(只要它们已标准化)。

虽然您确实声明将为每个区域使用不同的数据库,但我设计了这一点,以便它们都可以在一个数据库中工作。目前您可能只有 5 个区域,但这提供了轻松添加更多区域的灵活性:

table: region
regionID        varchar(2)
regionName      varchar(50)
Run Code Online (Sandbox Code Playgroud)

定义每个领域的数据。我使用了代理键(realmID),因为realmName 可能不是唯一的。这假设每个领域只能属于一个区域(regionID 需要是区域表上的 RegionID 的外键):

table: realm
realmID         int
regionID        varchar(2)
realmName       varchar(50)
Run Code Online (Sandbox Code Playgroud)

定义每个用户(卖方/买方)的数据。我认为如果它有一个代理键(sellerID)会更好,因为卖家/买家的名字/姓氏组合可能并不完全唯一。请注意,您可能还需要一个地址表来存储多个:

table: user
userID          int
userFirstName   varchar(20)
userLastName    varchar(20)
userEmail       varchar(100)
Run Code Online (Sandbox Code Playgroud)

每次拍卖的数据。AuctionID 将是自动生成的 ID 和主键。您还需要在realmID(领域表上的realmID)和sellerID(用户表上的userID)上使用外键:

table: auction
auctionID       int
realmID         int
sellerID        int
auctionPrice    decimal
auctionStart    datetime
Run Code Online (Sandbox Code Playgroud)

已完成的每次拍卖的数据,其外键位于buyerID(用户表上的userID)上:

table: auctionHistory
auctionID       int
buyerID         int
finalPrice      decimal
auctionFinished datetime
Run Code Online (Sandbox Code Playgroud)

我认为您不需要一个单独的表来进行“扫描”。这将是对拍卖表中在拍卖历史表中没有匹配行的行的简单查询。希望这能帮助您入门。如果我错过/误读了任何内容,请告诉我。