如何设计电子商务网站的数据库?

时间:2018-06-27 05:26:00

标签: mysql sql database oracle postgresql

如何为不具有相同属性的产品创建数据库;例如,最好有一个产品表:

speed = []
pos = []
while True:
    try:
        print("Enter cow speed and then position: ")
        a = int(input("Enter position: "))
        b = int(input("Enter speed: "))
        pos.append(a)
        speed.append(b)
        print("Do you want another cow? ")
        c = input("Enter 'no' to stop or any other string to have another cow: ")
        if c == 'no':
            break
        else:
            continue
    except ValueError:
        print("Please enter 1 number only.")
        continue
newP = []
newS = []
while pos:
    mini = pos[0]  # arbitrary number in list 
    for x in pos: 
        if x < mini:
            mini = x
    r = pos.index(mini)
    newS.append(speed.pop(r))
    newP.append(mini)
    pos.remove(mini)    
newS = newS[::-1]
groups = 1
k = 1
for i in range(len(newS)):
    if newS[i] <= newS[k]:
        newS[k] = newS[i]
        k += 1
    else:
        k += 1
        groups += 1
print(groups)

或单独的表: 汽车

id|category|Description   |Mileage|Author_name |Print_length|Language|
1 |cars    |honda cvic ...|12315  |            |            |        |
2 |books   |Stranger's... |       |Albert Camus|208 page    |English |

书籍:

 id|brand|Description   |Mileage|Body Type|yeasr|
 1 |Honda|honda cvic ...|12315  |sedan    |2015 |   

请告知。

1 个答案:

答案 0 :(得分:1)

您定义的任何一种方法都可以,是的。但是随着您网站的扩展和增长,您可能会遇到问题。

您建议的第一种方法存在一些问题。

  1. 在添加新产品类型(例如“帽子”)时,您可能需要添加其他列来描述与汽车或书籍无关的帽子的属性。这将导致表稀疏。即每个产品/行将仅具有列的子部分的数据。这可能会影响存储数据所需的存储。 (您的数据库是否为这些空白列分配了空间?如果这样,您的空间需求可能迅速增加。)
  2. 在对表进行修改(添加列,重命名列,删除列)时,执行修改时可能会造成巨大的性能损失,因为MyISAM实现会将整个表复制到临时表,而删除旧表表,并将临时表重命名为原始表。 (如here所述)

您的第二种方法有助于解决上述两个问题,但会引入值得考虑的新问题。

  1. 如果您的策略是针对每种产品类型创建一个新表,则该表会在大量相似但略有不同的表中迅速爆发。想象一下,如果Amazon或Newegg采用这种方法-表格数量将达到惊人的数量,并且维护将成为问题。此外,所有新产品都将需要修改数据库结构以及位于数据库顶部的webapp代码。
  2. 调整索引以维护数千个产品表上的性能似乎是一项不必要的繁重任务。

解决方案:

正如另一位海报建议的那样,从两个简单的表开始-一个“产品”表(ID,名称)和一个“属性”表(ID,ProductID,名称,值),将解决很多复杂性并考虑到无需修改基础表结构即可发布新产品,这是一个巨大的胜利。这种方法将需要使用索引来优化性能,但是由于将仅使用两个表,因此您可以更好地集中精力。