ugrás a tartalomhoz

Adatbázis tervezés hírekhez három nyelven

Anonymous · 2005. Aug. 2. (K), 13.46
Szasztok!

Érdekelne, hogy milyen megoldást javasoltok 3 nyelvű szövegek tárolására/megjelenítésére?

Mondjuk adott egy hír tábla, ami tárolja a dátumot, a hír szövegét, azonosítóját, a feladó nevét.
Külön "oszlopban" érdemes tárolni a két másik nyelvű szöveget,
vagy egy másik táblában? Esetleg, ha sok ilyen jellegű tábla van egy DB-ben, akkor van értelme egy másik adatbázist létrehozni?
Vagy ezt hogy szokták általában csinálni?

Előre is köszi a segítséget!
Üdv:

El
 
1

hír nyelve

bbalint · 2005. Aug. 2. (K), 13.54
én a mellett teszem le a voksom, hogy legyen egy, a tartalmakat tartalmazó tábla és a tartalom föltöltésénél meg kelljen adni egy nyelvet, hogy milyen nyelvű is az.
extraként lehet/érdemes esetleg megcsinálni valamilyen összerendelést a különböző nyelvű tartalmak között,

a sokoszlopos tárolással az (lehet) a baj, hogy ha neadj'isten kell egy új nyelv, akkor az egész adattáblát módosítani kell, sőt, esetleg a programot is

bbalint
2

<Nincs cím>

Anonymous · 2005. Aug. 2. (K), 13.59
Tehát a tartalmakat külön táblába pakoljam.. Köcci :)
3

Egy táblába

Poetro · 2005. Aug. 2. (K), 14.15
Én egy táblába raknám az egészet. Összesen 2 mező fontos ezekből: szoveg, és a nyelv. Azaz minden egyes elemnél tudod hogy mi a tartalom, és az milyen nyelven van. Később igy ujabb nyelv esetén nem változik sem a stuktúra, se semmi, csak újabb tartolom kerül be a nyelvek közé is. Ha a különböző nyelvek szövegei összekapcsolódnak, akkor egy kapcsoló táblával oldanám meg, ami tartalmazza a tartalom azonositojat, és ekkor a főtablaba mekerül egy újabb oszlop ami ezt az azonosítót tárolja.
--------
Poetro
10

metaadatok?

Hodicska Gergely · 2005. Aug. 3. (Sze), 12.47
Szia!


Ez így nem az igazi. Mert akkor minden nyelv egy külön sort eredményez, de így a közös adatok (dátum, stb.) mindegyik sorba bekerül. Normál forma rulz. Akkor már jobb ha mindegyik nyelvnek külön oszlop. De jobb ha külön tábla.


Felhő
4

Külön tábla

aurum · 2005. Aug. 2. (K), 14.27
Mindenképpen külön táblába tenném, még ha egyetlen nyelvű is. A tábla csak a szövegeket tárolja, viszont négyelemű összetett kulccsal. A module mutatja, hogy melyik modulhoz tartozik a szöveg, nem csak cikk lehet, hanem termék, kategória, stb. A textType mutatja meg, hogy milyen szöveg, cím, alcím, rövid szöveg, stb. A targetID adja meg az eredeti objektum, cikk, termék azonosítóját, míg a language a szabványos kétbetűs nyelvkód.

Előnye ennek a megoldásnak, hogy a nyelvek és a szövegek típusa tetszés szerint bővíthető, mégsem okoz semmilyen strukturális változtatást. Ha akarsz például a termék mellé felvehetsz egy új szöveges paramétert, szlogen néven, az is itt tárolódik, csak a szöveg típusa más.

További előnye, hogy mivel minden szöveg egyetlen táblában van, a szájt egész szövegállományában tudsz egyszerre keresni, legyen az termék, cikk, vagy bármi, cím, rövid szöveg, hosszú szöveg, stb.


CREATE TABLE `text` (
  `module` int(10) unsigned NOT NULL default '0',
  `textType` int(10) unsigned NOT NULL default '0',
  `targetID` int(10) unsigned NOT NULL default '0',
  `language` char(2) NOT NULL default '',
  `text` longtext NOT NULL,
  PRIMARY KEY  (`module`,`textType`,`targetID`,`language`),
  FULLTEXT KEY `text` (`text`)
) TYPE=MyISAM;
5

fenntartott szavakat kerüljük

Hojtsy Gábor · 2005. Aug. 2. (K), 21.43
Azért én nem hoznék létre TEXT nevű táblát, hiszen ez egy foglalt szó az SQL parancsok számára.
6

Prefix

aurum · 2005. Aug. 2. (K), 22.20
Eredetileg prefixe van a táblának, de kivettem belőle a változót. Az elv viszont remélem érthető akkor is, ha selectnek nevezem a táblát. Gondoltam nem komplett forráskódra van szükség, de legyen úgy:

CREATE TABLE ".$tablePrefix."text (
  module int(10) unsigned NOT NULL default '0',
  textType int(10) unsigned NOT NULL default '0',
  targetID int(10) unsigned NOT NULL default '0',
  language char(2) NOT NULL default '',
  text longtext NOT NULL,
  PRIMARY KEY  (module, textType, targetID , language),
  FULLTEXT KEY text (text)
) TYPE=MyISAM;


Közben kipróbáltam, semmi gondot nem okoz, hogy text néven létrehoztam egy táblát, minden művelet működik rajta.
7

egy képzeletbeli adatbázis motorral?

Hojtsy Gábor · 2005. Aug. 2. (K), 22.31
Az, hogy egy konkrét implementációban egy adott helyen használt védett név látszólag nem okoz gondot, már rögtön okot ad az általánosításra?
8

A text nem reserved word!

aurum · 2005. Aug. 2. (K), 22.38
Csak a tisztánlátás kedvéért, hogy ne menjen át a téma téves hipotézisek miatt flamebe, a TEXT nem reserwed word a MySQLben:

http://dev.mysql.com/doc/mysql/en/reserved-words.html

MySQL allows some keywords to be used as unquoted identifiers because many people previously used them. Examples are those in the following list:

* ACTION
* BIT
* DATE
* ENUM
* NO
* TEXT
* TIME
* TIMESTAMP


Ez meg azt mondja számomra, hogy megfelelően idézőjelezve még a fenntartott szavakat is lehet használni:

The words in the following table are explicitly reserved in MySQL. Most of them are forbidden by standard SQL as column and/or table names (for example, GROUP). A few are reserved because MySQL needs them and (currently) uses a yacc parser. A reserved word can be used as an identifier if you quote it.


Az SQL92 szabványban sem reserved word, sőt, egyik SQL szerverben sem:
Sybase:
http://manuals.sybase.com/onlinebooks/group-as/asg1250e/refman/@Generic__BookTextView/26603
InterBase:
http://www.ibphoenix.com/main.nfs?a=ibphoenix&s=1121622711:51507&page=ibp_reserved
Postgre:
http://www.postgresql.org/docs/7/interactive/syntax.htm#AEN426
DB2:
http://publib.boulder.ibm.com/infocenter/db2v7luw/index.jsp?topic=/com.ibm.db2v7.doc/db2s0/db2s0521.htm
ORACLE:
http://www-rohan.sdsu.edu/doc/oracle/server803/A54660_01/appc.htm
MS SQL:
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/tsqlref/ts_ra-rz_9oj7.asp

Ezek alapján már azt hiszem, bátran általánosítható, hogy a text nevű tábla és a text nevű mező nem okoz gondot az SQL adatbázisban. Ha meg mégis, akkor én kérek elnézést a dezinformációért!

Mintha a téma kezdene átmenni kötekedésbe, az elvről, ami az eredeti felvetés volt, meg szó sem esik. Remélem nem lesz a weblaborból is prog.hu
9

másolás

Hojtsy Gábor · 2005. Aug. 3. (Sze), 09.50
Nos, sajnálom, ha kötekedésnek vetted, nekem az a tapasztalatom, hogy sokan egy-az-egyben másolják a példákat és használják fel, és mint tudjuk, az SQL lekérdezésekben nem jellemző, hogy a táblanevet idézőjelbe teszik a fejlesztők (minekis?). Tehát végeredményben eljutunk az idézőjel nélküli TEXT névig. Kétségtelen, hogy a MySQL a típusneveit szinte kivétel nélkül foglalt szavakként kezeli, és én jobb szeretem nem kihasználni az ilyen kivételeket. Ez nem azt jelenti, hogy nem használhatja az, aki követi, hogy éppen ezt szabad.