Ingewikkeld Database Ontwerp

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Jason de Ridder

Jason de Ridder

31/10/2007 11:41:00
Quote Anchor link
Hallo best PHP-hulpers,

Ik ben bezig om een meertalige site te maken.
Het moet een beetje richting TYPO3 toe gaan. Dit heb ik wel een beetje voor elkaar. Maar nu wil ik ook modules gaat toevoegen.
Een module moet bestaat uit verschillende reeds gedefineerde velden. (Text, Html, image, date, datetime, time, etc.), combinatie daarvan. Alleen krijg ik mijn cirkeltje niet rond, want als ik bijvoorbeeld doe:
We noemen de module 'nieuws'
modules
- id = 1
- module_name = 'nieuws'
module_fields
- module_id = 1
- id = 1,2,3,4
- field_name = 'titel', 'intro', 'body', 'datum'
- field_type = 'text', 'text', 'html', 'datetime'
module_field_content
- module_field_id = 1
- id = 1,5
- value = 'titel1','titel2'

- module_field_id = 2
- id = 2,6
- value = 'intro1','intro2'

- module_field_id = 3
- id = 3,7
- value = 'body1', 'body2'

- module_field_id = 4
- id = 4,8
- value = 'datum1','datum2'
(waarbij de komma voor een volgend record staat)

Als ik dat bijvoorbeeld dus zo invoer. Heb ik wel netjes alle content apart, maar ik heb ze dan niet netjes gegroepeerd.

Is er iemand die mij op weg kan helpen om een 'self-describing' database te maken?

Alvast bedankt!

Edit:

Topic titel in normaal Nederlands ;-)
Gewijzigd op 01/01/1970 01:00:00 door Jason de Ridder
 
PHP hulp

PHP hulp

20/10/2021 01:57:21
 
Frank -

Frank -

31/10/2007 11:47:00
Quote Anchor link
Sorry, maar ik kan er geen touw aan vastknopen.

Even een opzetje zoals ik het doe met content in diverse talen:

tabel languages:
- id (pk)
- iso_code
- description

tabel modules:
- id (pk)
- date_created
- etc

tabel module_content:
- id_language (fk op languages en samen met id_module een pk)
- id_module (fk op modules en samen met id_language een pk)
- status (kan evt. met fk op een aparte tabel, wel zo handig)
- title
- content
- date_created

De id's zijn een PK, de id_naam een FK en met 2 FK's wordt een PK gevormd.
Gewijzigd op 01/01/1970 01:00:00 door Frank -
 
Jason de Ridder

Jason de Ridder

31/10/2007 12:03:00
Quote Anchor link
Ja nu ik het terug lees is het een groot zooitje. Wat ik bedoel. Afgezien van de meertaligheid.

Ik heb bepaalde types data:
Field (textfield)
Area (textarea)
HTML (Fck/tiny/etc)
Check (checkbox)
Radio (radiobutton)
Image (uploadfield)
Datetime (verschillende textfields)
etc...

Een module bestaat uit een combinatie van de bovenstaande types. Een voorbeeld module nieuws zou dus kunnen bestaan uit:
Field (titel)
Area (intro)
HTML (body)
Datetime (zichtbaar op)

Dus in mijn tabel modules heb ik de volgende velden:
id
--- etc ---
module_name
module_description

In module_name zet ik neer 'Nieuws' in module_description 'Dit is een nieuwsmodule'.
====================
Ook heb ik tabel module_fields
id
--- etc ---
module_id
module_field_name
module_field_type

In module_id zet ik de ID van de overkoepelende module (nieuws in dit geval). In module_field_name zet ik de volgende records:
- titel
- intro
- body
- zichtbaar op

In module_field_type zet ik de volgende records (in de volgorde zoals hierboven) (Evt. wordt dit later een ID, voordat je me hiermee om mijn oren slaat ;-))
- Field
- Area
- HTML
- Datetime
=======================
Nu komt het probleem:
Als ik records wil toevoegen kan ik dus bijvoorbeeld doen:
module_field_content
id
--- etc ---
module_field_id
module_content

Maar hier koppel ik wel de juiste content aan het juiste veld, maar ik ben mijn inline relatie kwijt. (Dus de relatie van: titel, intro, body en zichtbaar op)
Dus als ik bijvoorbeeld alle titels ophaal, weet ik niet welke body (etc) daarbij hoort.

Ik zou dit kunnen oplossen om komma gescheiden waarden op te slaan. Maar dan is het niet mooi gerefereerd aan de velden.
Een andere optie is geserialised op te slaan.

Hoop dat het zo wat duidelijker is!

En bedankt alvast!
 
Joren de Wit

Joren de Wit

31/10/2007 12:19:00
Quote Anchor link
Het lijkt me dat je in de tabel module_field_types alle mogelijke types opslaat:

module_field_types
-----------------------
id_field_type
field_description (Field, Area, etc)
field_type (textfield, textarea, etc)

Om vervolgens in de module_fields de verschillende velden ook een type mee te kunnen geven

module_fields
----------------
id_field (PK)
id_field_type (FK op module_field_types)
field_name (Titel, Intro, etc)
id_module (FK op modules)

Vervolgens geef je in de tabel waar je de content opslaat een field_id op waar de content toe behoort. Via dit field_id kun je een module_id achterhalen en daarmee kun je alle andere bijbehorende velden achterhalen.
 
Jason de Ridder

Jason de Ridder

31/10/2007 12:58:00
Quote Anchor link
Dat heb ik ook reeds gezegd in mijn vorige post.

Maar ik ben even gaan zitten en heb het 'getackeld'. Ik heb nu een extra tabel welke de items groepeert en aan de module zelf koppelt. De content krijgt een extra kolom welke de id insert van de id van de extra tabel.

Evengoed bedankt Frank en Blanche!


Groet!
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.