gpt4 book ai didi

php - 如何存储大部分为空的数据?

转载 作者:行者123 更新时间:2023-11-29 06:01:42 25 4
gpt4 key购买 nike

我想建立一个系统,允许每个帖子有 200 种不同的翻译。然而,大多数翻译都不会存在,因此会有很多空数据集。如果我将每种语言(包括空语言)保存为特定列,性能和存储会受到多大影响?即

English | Arabic | Mandarin | Russian | French         | German

Potato | | | | Pomme de Terre |
Orange | | | | Orange |
Peach | | | | |

我不会经常循环遍历整个列表,我会使用 session 变量或用户设置,然后直接从该列加载(如果存在),并回退到默认语言,然后可能会进行完整搜索.

if (exists(french))
{echo french}
else {if(exists(english))
{echo english}}
else {echo links to non-null language}
}

我假设,如果我告诉服务器去哪一列,处理方面的开销可以忽略不计?我还假设空单元格在存储方面可以忽略不计?但是我不确定,这可能是一个巨大的错误。

我想像这样工作的原因是我可以分配语言代码,而不是每个安装的实例都有不同的顺序(例如英语|法语|德语|普通话与英语|普通话|德语|法语)。

为了防止 XY 问题,这里有一个更全局的公式:我想建立一个允许多种语言的系统,但我希望在大多数情况下只使用一两种语言。什么是有效的存储方式?

最佳答案

关键字:关系数据库。

您将要使用多个表。假设默认语言是英语,那么您的“单词”表将隐式包含英语单词。

Words:
Id | Word
1 | Potato
2 | Orange

Languages:
Id | Name
1 | Norwegian
2 | Danish

Translations:
Word | Language | Translated
1 | 1 | Potet
2 | 1 | Oransje
1 | 2 | Kartoffel
2 | 2 | Appelsin

然后你可以这样做(伪sql,你可以先查找语言和单词id,或者使用更高级的查询):

SELECT Translated FROM Translations WHERE Word = (the word id) and Language = (the language id)

这样做的好处是可以非常简单地列出您支持的所有语言、您支持的所有词以及特定语言的所有翻译词(或者,查找一种语言的所有非翻译词)。

将“土 bean ”翻译成“丹麦语”的特定查询如下所示:

SELECT Translated FROM Translations
JOIN Words ON Words.Id = Translations.Word
JOIN Languages ON Languages.Id = Translations.Language
WHERE
Languages.Name = "Danish" and Words.Word = "Potato"

关于php - 如何存储大部分为空的数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44390705/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com