我试图保持网站用户收入的记录,但在性能和整体可用性方面,以下哪种设计最适合我:
•第一种方式:
这样,将创建一个包含每年表格的数据库。每个表将有13列,用户ID和12个月。每个字段的值将是一个字符串化的数组,其中包含当月所有天的值,例如:[12.5, 28.3, 9.75, ...]
。
码:
-- Create a database to keep record of the earnings of all users.
CREATE DATABASE IF NOT EXISTS `Earnings_Record`;
-- Create a table for each year containing 13 columns, the user ID and the 12 months.
CREATE TABLE IF NOT EXISTS `Earnings_Record`.`Earnings_2017` (
`ID` INT(11) NOT NULL,
`January` VARCHAR(250) NOT NULL,
`February` VARCHAR(250) NOT NULL,
...
`December` VARCHAR(250) NOT NULL,
PRIMARY KEY (`ID`)
) ENGINE = InnoDB CHARACTER SET utf8 COLLATE utf8_general_ci;
•第二种方式:
这样,将创建多个数据库,每年一个,每个月都有一个表。每个表格将包含28-31 +1列,用户ID和28-31天。每个字段的值将是一个小数,例如:
12.5
。码:
-- Create a database to keep record of the earnings of all users for 2017.
CREATE DATABASE IF NOT EXISTS `Earnings_2017`;
-- Create a table for each month with 28-31 + 1 columns, the user ID and the 28-31 days.
CREATE TABLE IF NOT EXISTS `Earnings_2017`.`January` (
`ID` INT(11) NOT NULL,
`Day 1` DECIMAL(10, 2) NOT NULL,
`Day 2` DECIMAL(10, 2) NOT NULL,
...
`Day 31` DECIMAL(10, 2) NOT NULL,
PRIMARY KEY (`ID`)
) ENGINE = InnoDB CHARACTER SET utf8 COLLATE utf8_general_ci;
由于该网站有望运行5-10年,因此在整体性能和长期可维护性方面,这是设计此网站的最佳方法吗?
(要记住的一件事是,活跃用户每天都会多次更新每个用户的收入)
最佳答案
第三方式:
创建一个数据库。为每个实体创建一个表:
CREATE DATABASE IF NOT EXISTS Earnings_Record;
CREATE TABLE IF NOT EXISTS Earnings_Record.Users (
UsersId INT AUTO_INCREMENT PRIMARY KEY,
. . .
);
CREATE TABLE IF NOT EXISTS Earnings_Record.Earnings (
EarningsID INT AUTO_INCREMENT PRIMARY KEY,
UserId INT NOT NULL,
EarningsDate DATE,
Amount DECIMAL(10, 2) -- or whatever
CONSTRAINT fk_Earnings_UserId FOREIGN KEY (UserId) REFERENCES Users(UserId)
) ;
简单。易于查询。正是您所需要的。这是表示数据的SQL方法。